import { customRef } from 'vue'

/**
 * 自定义响应式变量
 * @param value 默认值
 * @param onChange 变化时触发的回调函数
 * @param immediate 是否立刻执行一次
 * @returns
 */
export function getCustomRef<T>(value: T, onChange: (newVal: T,oldVal:T) => void, immediate = false) {
  if (immediate) {
    onChange(value,value);
  }
  return customRef((track, trigger) => {
    let _value = value;
    return {
      get() {
        track();
        return _value;
      },
      set(val: T) {
        if (_value != val) {
          onChange(val,_value);
          _value = val;
          trigger();
        }
      },
    };
  });
}
